home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / include / linux / mroute6.h < prev    next >
C/C++ Source or Header  |  2009-10-16  |  4KB  |  138 lines

  1. #ifndef __LINUX_MROUTE6_H
  2. #define __LINUX_MROUTE6_H
  3.  
  4. #include <linux/types.h>
  5. #include <linux/sockios.h>
  6.  
  7. /*
  8.  *    Based on the MROUTING 3.5 defines primarily to keep
  9.  *    source compatibility with BSD.
  10.  *
  11.  *    See the pim6sd code for the original history.
  12.  *
  13.  *      Protocol Independent Multicast (PIM) data structures included
  14.  *      Carlos Picoto (cap@di.fc.ul.pt)
  15.  *
  16.  */
  17.  
  18. #define MRT6_BASE    200
  19. #define MRT6_INIT    (MRT6_BASE)    /* Activate the kernel mroute code     */
  20. #define MRT6_DONE    (MRT6_BASE+1)    /* Shutdown the kernel mroute        */
  21. #define MRT6_ADD_MIF    (MRT6_BASE+2)    /* Add a virtual interface        */
  22. #define MRT6_DEL_MIF    (MRT6_BASE+3)    /* Delete a virtual interface        */
  23. #define MRT6_ADD_MFC    (MRT6_BASE+4)    /* Add a multicast forwarding entry    */
  24. #define MRT6_DEL_MFC    (MRT6_BASE+5)    /* Delete a multicast forwarding entry    */
  25. #define MRT6_VERSION    (MRT6_BASE+6)    /* Get the kernel multicast version    */
  26. #define MRT6_ASSERT    (MRT6_BASE+7)    /* Activate PIM assert mode        */
  27. #define MRT6_PIM    (MRT6_BASE+8)    /* enable PIM code    */
  28.  
  29. #define SIOCGETMIFCNT_IN6    SIOCPROTOPRIVATE    /* IP protocol privates */
  30. #define SIOCGETSGCNT_IN6    (SIOCPROTOPRIVATE+1)
  31. #define SIOCGETRPF    (SIOCPROTOPRIVATE+2)
  32.  
  33. #define MAXMIFS        32
  34. typedef unsigned long mifbitmap_t;    /* User mode code depends on this lot */
  35. typedef unsigned short mifi_t;
  36. #define ALL_MIFS    ((mifi_t)(-1))
  37.  
  38. #ifndef IF_SETSIZE
  39. #define IF_SETSIZE    256
  40. #endif
  41.  
  42. typedef    __u32        if_mask;
  43. #define NIFBITS (sizeof(if_mask) * 8)        /* bits per mask */
  44.  
  45. #if !defined(__KERNEL__) && !defined(DIV_ROUND_UP)
  46. #define    DIV_ROUND_UP(x,y)    (((x) + ((y) - 1)) / (y))
  47. #endif
  48.  
  49. typedef struct if_set {
  50.     if_mask ifs_bits[DIV_ROUND_UP(IF_SETSIZE, NIFBITS)];
  51. } if_set;
  52.  
  53. #define IF_SET(n, p)    ((p)->ifs_bits[(n)/NIFBITS] |= (1 << ((n) % NIFBITS)))
  54. #define IF_CLR(n, p)    ((p)->ifs_bits[(n)/NIFBITS] &= ~(1 << ((n) % NIFBITS)))
  55. #define IF_ISSET(n, p)  ((p)->ifs_bits[(n)/NIFBITS] & (1 << ((n) % NIFBITS)))
  56. #define IF_COPY(f, t)   bcopy(f, t, sizeof(*(f)))
  57. #define IF_ZERO(p)      bzero(p, sizeof(*(p)))
  58.  
  59. /*
  60.  *    Passed by mrouted for an MRT_ADD_MIF - again we use the
  61.  *    mrouted 3.6 structures for compatibility
  62.  */
  63.  
  64. struct mif6ctl {
  65.     mifi_t    mif6c_mifi;        /* Index of MIF */
  66.     unsigned char mif6c_flags;    /* MIFF_ flags */
  67.     unsigned char vifc_threshold;    /* ttl limit */
  68.     __u16     mif6c_pifi;        /* the index of the physical IF */
  69.     unsigned int vifc_rate_limit;    /* Rate limiter values (NI) */
  70. };
  71.  
  72. #define MIFF_REGISTER    0x1    /* register vif    */
  73.  
  74. /*
  75.  *    Cache manipulation structures for mrouted and PIMd
  76.  */
  77.  
  78. struct mf6cctl
  79. {
  80.     struct sockaddr_in6 mf6cc_origin;        /* Origin of mcast    */
  81.     struct sockaddr_in6 mf6cc_mcastgrp;        /* Group in question    */
  82.     mifi_t    mf6cc_parent;            /* Where it arrived    */
  83.     struct if_set mf6cc_ifset;        /* Where it is going */
  84. };
  85.  
  86. /*
  87.  *    Group count retrieval for pim6sd
  88.  */
  89.  
  90. struct sioc_sg_req6
  91. {
  92.     struct sockaddr_in6 src;
  93.     struct sockaddr_in6 grp;
  94.     unsigned long pktcnt;
  95.     unsigned long bytecnt;
  96.     unsigned long wrong_if;
  97. };
  98.  
  99. /*
  100.  *    To get vif packet counts
  101.  */
  102.  
  103. struct sioc_mif_req6
  104. {
  105.     mifi_t    mifi;        /* Which iface */
  106.     unsigned long icount;    /* In packets */
  107.     unsigned long ocount;    /* Out packets */
  108.     unsigned long ibytes;    /* In bytes */
  109.     unsigned long obytes;    /* Out bytes */
  110. };
  111.  
  112. /*
  113.  *    That's all usermode folks
  114.  */
  115.  
  116.  
  117.  
  118. /*
  119.  * Structure used to communicate from kernel to multicast router.
  120.  * We'll overlay the structure onto an MLD header (not an IPv6 heder like igmpmsg{}
  121.  * used for IPv4 implementation). This is because this structure will be passed via an
  122.  * IPv6 raw socket, on wich an application will only receiver the payload i.e the data after
  123.  * the IPv6 header and all the extension headers. (See section 3 of RFC 3542)
  124.  */
  125.  
  126. struct mrt6msg {
  127. #define MRT6MSG_NOCACHE        1
  128. #define MRT6MSG_WRONGMIF    2
  129. #define MRT6MSG_WHOLEPKT    3        /* used for use level encap */
  130.     __u8        im6_mbz;        /* must be zero           */
  131.     __u8        im6_msgtype;        /* what type of message    */
  132.     __u16        im6_mif;        /* mif rec'd on           */
  133.     __u32        im6_pad;        /* padding for 64 bit arch */
  134.     struct in6_addr    im6_src, im6_dst;
  135. };
  136.  
  137. #endif
  138.